contents

JSON은 사람이 읽을 수 있는 경량의 텍스트 기반 데이터 교환 형식인 반면, BSON은 JSON과 유사한 도큐먼트를 위한 바이너리 인코딩 직렬화 형식입니다. 간단히 말해, BSON은 저장 및 속도 효율성을 위해 설계된, 기계가 읽기 빠른 JSON 버전입니다.

각각을 자세히 분석해 보겠습니다.


JSON (JavaScript Object Notation) 📄

JSON은 사람이 읽고 쓰기 쉬우며, 기계가 파싱하고 생성하기 쉬운 텍스트 기반 데이터 형식입니다. 자바스크립트에서 파생되었지만 현재는 언어에 독립적이며, 거의 모든 프로그래밍 언어에서 파서를 사용할 수 있습니다.

데이터 타입

JSON은 여섯 가지 기본 데이터 타입을 지원합니다.

예시

다음은 사용자를 나타내는 일반적인 JSON 객체입니다.

{
  "userId": "u123",
  "username": "johndoe",
  "isActive": true,
  "lastLogin": "2025-10-03T05:20:00Z",
  "tags": ["사용자", "기여자"],
  "profile": {
    "followers": 150,
    "following": 75
  }
}

JSON의 장점

JSON의 단점


BSON (바이너리 JSON) ⚙️

BSON은 JSON과 유사한 도큐먼트를 위한 바이너리 인코딩 직렬화 형식입니다. 이는 MongoDB를 위해 만들어졌으며, 데이터베이스 저장 및 네트워크 전송에서 JSON보다 더 효율적이고 풍부한 기능을 제공하도록 설계되었습니다.

BSON이 존재하는 이유 (해결하는 문제)

BSON은 JSON의 단점을 해결하기 위해 설계되었습니다.

  1. 탐색 속도 (스캔 가능성): 이것이 핵심 장점입니다. BSON은 데이터 자체에 요소와 도큐먼트의 길이 정보를 포함합니다. 이를 통해 BSON 파서는 필요 없는 필드를 파싱하지 않고 건너뛸 수 있습니다. JSON 객체의 경우, 끝 부분에 있는 필드를 찾으려면 전체 텍스트를 파싱해야 하지만, BSON 객체는 해당 필드로 직접 이동할 수 있습니다.
  2. 효율성: 길이 및 타입 정보 오버헤드 때문에 항상 JSON보다 크기가 작은 것은 아니지만, BSON은 기계가 인코딩(직렬화)하고 디코딩(역직렬화)하기에 매우 빠르도록 설계되었습니다.
  3. 더 많은 데이터 타입: BSON은 JSON에서 사용할 수 없는 유용한 추가 타입을 통해 JSON 데이터 타입을 확장합니다. 여기에는 다음이 포함됩니다.
    • 날짜 (Date): 유닉스 시간(Unix epoch) 이후의 밀리초를 나타내는 64비트 정수.
    • 바이너리 데이터 (Binary Data): 이미지나 다른 파일 데이터와 같은 바이트 배열을 저장.
    • 특정 너비의 정수: Int32, Int64.
    • ObjectId: MongoDB의 기본이 되는 12바이트 고유 ID.
    • 정규 표현식, 타임스탬프 등.

BSON 구조

BSON은 직접 손으로 작성하지 않습니다. 바이너리 형식이기 때문입니다. 위 JSON 예제는 BSON에서 바이트 시퀀스로 표현되며, 각 필드는 타입, 이름, 값으로 접두사가 붙습니다. 전체 객체 또한 총 길이를 바이트 단위로 나타내는 접두사를 가집니다.


주요 차이점 요약 ⚖️

특징 JSON (JavaScript Object Notation) BSON (바이너리 JSON)
형식 텍스트 기반 바이너리 기반
가독성 사람이 읽을 수 있음 기계가 읽을 수 있음
파싱 속도 느림 (텍스트 파싱 필요) 빠름 (빠른 인코딩/디코딩을 위해 설계됨)
탐색 요소를 찾기 위해 전체 구조를 파싱해야 함. 스캔 가능. 불필요한 필드를 건너뛸 수 있음.
데이터 타입 제한적 (문자열, 숫자, 불리언, 배열, 객체, null) 확장됨 (날짜, 바이너리 데이터, ObjectId 등 포함)
크기 작은 도큐먼트의 경우 종종 더 작음. 타입/길이 오버헤드로 더 클 수 있지만 효율적임.
주요 사용처 웹 API, 설정 파일. MongoDB 데이터 저장 및 네트워크 프로토콜.

언제 무엇을 사용해야 할까?

references